// @ts-nocheck
import Log from '../util/log.js'
import config from '../../../share/common/config/config.js'

const TAG = 'JS/Operator/BLE: '

export default {
    data: {},
    /**
     * 拼接下发数据 （从协议标识首节至协议内容尾字节求累加和后再对 256 取余）
     * @param tagId 相关文档获取
     * @param type  config.MType  /** 消息类型 ： 0x00:APP下发  0x01:APP获取 0x02:设备上报 0x03:设备请求
     * @param value 10进制
     * @return string 16进制  //A5 5A 01 00 00 08 00 02 00 04 00 00 00 00 8C
     */
    getTagsCommandHexStr(tagId, mType, value) {
        try {
            let data = value.toString(16).padStart(8, "0");
            let arr = ["A55A", "01", mType, "0008", tagId, "0004", data];
            Log.debug(TAG + 'sendHex-data1: ' + JSON.stringify(arr));
            let e = this.getCheckSum(arr.join(""));
            arr.push(e);
            Log.debug(TAG + 'sendHex-data2: ' + JSON.stringify(arr));
            return arr.join("").toUpperCase();
        } catch (err) {
            Log.error(TAG + "fn_sendHex ERROR：" + err);
            return;
        }
    },

    /**
     * 上报数据解析“数据单元组”
     */
    parseCharacteristic(changeData) {
        let dataLenStr = changeData.substr(8, 4);
        let dataLen = parseInt(dataLenStr, 16)
        var tagDataArray = new Array()
        for (var i = 0; i < dataLen / 8; i++) {
            var tagData = new Array()
            let startIndex = 12 + (i * 16);
            tagData[0] = changeData.substr(startIndex, 4);
            tagData[1] = changeData.substr(startIndex + 4, 4);
            tagData[2] = changeData.substr(startIndex + 8, 8);
            tagDataArray[i] = tagData
        }
        return tagDataArray
    },
    getCheckSum(arr) {
        return this.sumComplementation(arr).toString(16).padStart(2, "0");
    },
    /**
     * 协议校验 （从协议标识首节至协议内容尾字节求累加和后再对 256 取余）
     * @param changeData
     */
    verifyProtocol(changeData) {
        if (changeData.length < 14) return false;
        var checkHex = changeData.slice(0, -2);
        var lastHex = changeData.slice(-2);
        return this.sumComplementation(checkHex) == parseInt(lastHex, 16);
    },
    /**
     * 总合求余 （从协议标识首节至协议内容尾字节求累加和后再对 256 取余）
     * @param data
     * @return int
     */
    sumComplementation(data) {
        let sum = 0;
        for (let i = 0; i < data.length / 2; i++) {
            sum += parseInt(data.slice(i * 2, (i + 1) * 2), 16)
        }
        return parseInt(sum) % 256
    },
}